/**
 *
 * 版权所有 © cybersky.com
 *
 */
package cn.cybertron.primus.report.custom;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.nutz.ioc.Ioc;

import cn.cybertron.primus.report.entity.ReportObject;

/**
 * 报表自定义助手接口
 * 
 * @author ch
 *
 */
public interface ReportCustomHelper {
	/**
	 * 为setQuery()方法准备params参数
	 * 
	 * @param ioc
	 * @param request
	 * @param response
	 * @return
	 */
	public Map<String, Object> prepareQueryParams(Ioc ioc, HttpServletRequest request, HttpServletResponse response);

	/**
	 * 为setChart()方法准备params参数
	 * 
	 * @param ioc
	 * @param request
	 * @param response
	 * @return
	 */
	public Map<String, Object> prepareChartParams(Ioc ioc, HttpServletRequest request, HttpServletResponse response);

	/**
	 * 为setPage()方法准备params参数
	 * 
	 * @param ioc
	 * @param request
	 * @param response
	 * @return
	 */
	public Map<String, Object> preparePageParams(Ioc ioc, HttpServletRequest request, HttpServletResponse response);

	/**
	 * 根据表示报表数据源的json字符串设置Report对象的数据源信息
	 * 
	 * @param report
	 *            Report对象
	 * @param jsonQuery
	 *            表示报表数据源的json字符串
	 * @param params
	 *            其它需要的参数
	 */
	public void setQuery(ReportObject report, String jsonQuery, Map<String, Object> params);

	/**
	 * 根据表示报表统计图的json字符串设置Report对象的统计图信息
	 * 
	 * @param report
	 *            Report对象
	 * @param jsonChart
	 *            表示报表统计图的json字符串
	 * @param params
	 *            其它需要的参数
	 */
	public void setChart(ReportObject report, String jsonChart, Map<String, Object> params);

	/**
	 * 根据表示报表页面设置的json字符串设置Report对象的页面设置信息
	 * 
	 * @param report
	 *            Report对象
	 * @param jsonPage
	 *            表示报表页面设置的json字符串
	 * @param params
	 *            其它需要的参数
	 */
	public void setPage(ReportObject report, String jsonPage, Map<String, Object> params);

	/**
	 * 根据Report对象得到表示报表数据源的json字符串
	 * 
	 * @param report
	 *            Report对象
	 * @return 表示报表数据源的json字符串
	 */
	public String getQueryStr(ReportObject report);

	/**
	 * 根据Report对象得到表示报表统计图的json字符串
	 * 
	 * @param report
	 *            Report对象
	 * @return 表示报表统计图的json字符串
	 */
	public String getChartStr(ReportObject report);

	/**
	 * 根据Report对象得到表示报表页面设置的json字符串
	 * 
	 * @param report
	 *            Report对象
	 * @return 表示报表页面设置的json字符串
	 */
	public String getPageStr(ReportObject report);

	/**
	 * 为报表自定义页面的某步骤页面准备页面所需数据
	 * 
	 * @param step
	 * @param report
	 * @param request
	 * @param ioc
	 */
	public void prepareData(int step, ReportObject report, HttpServletRequest request, Ioc ioc);
}
